package com.jeff.utils;

import android.text.TextUtils;

import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

/**
 * author：duff
 * version：1.0.0
 * date：2017/8/31
 */
public class UrlUtil {

    public final static String PREFIX_HTTP = "http://";

    public final static String PREFIX_HTTPS = "https://";

    /**
     * 由host ＋ 参数创建Url
     *
     * @param host 主机地址
     * @param params 参数
     * @return 拼接好的URL地址
     */
    public static String buildUrl(String host, Map<String, Object> params) {
        if (params == null || params.size() == 0) {
            return host;
        }
        StringBuilder builtUrl = new StringBuilder(host);

        int len = params.size();
        int cnt = 0;
        builtUrl.append("?");
        for (String key : params.keySet()) {
            ++cnt;
            if (params.get(key) != null) {
                builtUrl.append(key.trim())
                        .append("=")
                        .append(URLEncoder.encode((params.get(key).toString())));
                if (cnt >= len) {
                    break;
                }
                builtUrl.append("&");
            }
        }

        return builtUrl.toString();
    }

    /**
     * 解析url中的参数
     * @param url 用于解析的Url
     * @return 参数的map
     */
    public static Map<String, Object> getParams(String url) {
        Map<String, Object> params = new LinkedHashMap<>();

        if (!TextUtils.isEmpty(url)) {
            int index = url.indexOf('?');
            if (index != -1) {
                url = url.substring(index + 1);
                String[] parameter = url.split("&");
                for (String param : parameter) {
                    String[] values = param.split("=");
                    params.put(values[0], values[1]);
                }
            }
        }

        return params;
    }

    /**
     * 解析主机地址
     *
     * @param url 用于解析的Url
     * @return 主机地址
     */
    public static String getHost(String url) {
        if (!TextUtils.isEmpty(url)) {
            return url.substring(0, url.indexOf('?'));
        }
        return url;
    }

    /**
     * 从url解析文件名 如：http://www.baidu.com/xxx.jpg 解析的结果为:xxx.jpg
     *
     * @param url 用于解析的Url
     * @return 文件名
     */
    public static String getFileName(String url) {
        return FileUtil.getFileName(url);
    }

    /**
     * 删除参数
     *
     * @param url 用于处理的url
     * @param paramKey 需要删除的Key值
     * @return 处理后的url
     */
    public static String removeParam(String url, String paramKey) {
        String host = getHost(url);
        Map<String, Object> params = getParams(url);
        params.remove(paramKey);

        return buildUrl(host, params);
    }

    /**
     * 删除参数
     *
     * @param url 用于处理的url
     * @param paramKeys 需要删除的Key值 Set
     * @return 处理后的url
     */
    public static String removeParams(String url, Set<String> paramKeys) {
        String host = getHost(url);
        Map<String, Object> params = getParams(url);
        for (String key : paramKeys) {
            params.remove(key);
        }
        return buildUrl(host, params);
    }

    public static boolean isHttpUrl(String path) {
        if (TextUtils.isEmpty(path)) {
            return false;
        }
        String lowCase = path.toLowerCase();

        return lowCase.startsWith(PREFIX_HTTP) || lowCase.startsWith(PREFIX_HTTPS);
    }

}
